昨天順利地將我們的APP推至image並且學會了更新的技巧了。
但是每次更新的時候todo-list的資料也跟著消失不見了,該怎麼辦呢。
這時候肯定就會想到需要一個儲存資料的方法,那個方法就是 ── Volumes
Volumes是由container建立,用於保存數據,就是這麼簡單,Volumes有幾個特點。
因為是單獨的container想怎麼用就怎麼用
待補
待補
待補
要建立Volumes的話需要直接搭配volume指令就能建立,如下則是建立一個名為todo-db的Volumes。
docker volume create todo-db
接下來就是要連接APP與Volumes,因此記得要先停止APP才能成功連接Volumes。
停止APP之後執行以下指令就能連接APP與Volumes。
docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
跟一般執行APP的指令很像,但是多了-v的標誌代表要指定Volumes
接下來就可以在APP中加入幾個todo事件,或是勾選完成。
之後便可以將APP的image停止並移除,重新建置再依照上面的指令執行。
執行完成後就會發現剛剛所做的操作以及資料都還留著呢,就是這麼的方便。
Bind Mounts跟Volumes不一樣的地方在於,Volumes會在docker的儲存目錄中建立一個新的目錄,並且由Docker管理使用;而Bind Mounts則是將主機(host)的目錄安裝置container中,所以目錄是由主機上的固定的路徑來使用,雖然Bind Mounts效能比較好,但是需要在特定目錄結構的主機文件系統中才能使用且無法使用Docker CLI來進行管理。
在開始使用Bind Mounts之前需要建立開發模式的container。
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
node:12-alpine \
sh -c "yarn install && yarn run dev"
-w /app 代表設置命令的工作目錄或是當前目錄
-v "$(pwd):/app" 代表將當前目錄綁定至container中的/app目錄中
剩下的就跟Dockerfile中的一樣,指定環境以及指令的順序。
接下來就可以執行logs命令查看檔案變化。
docker logs -f <container-id>
接下來將檔案修改並儲存,例如修改src/static/js/app.js中109的
- {submitting ? 'Adding...' : 'Add Item'}
+ {submitting ? 'Adding...' : 'Add'}
儲存之後除了在logs印出的資訊裡也可以在local:3000的頁面幾乎是立即看到變化,因為不需要安裝所有構建工具和環境,對於本地開發測試來說非常方便且實用。
明天就接著學習如何使用Multi-Container Apps。
參考文獻:
Docker官方文件